package cn.iocoder.yudao.module.reading.enums;

/**
 * 文件路径常量类
 * 定义绘本阅读应用中所有业务相关的文件存储路径
 * 
 * @author 李晨
 */
public class FilePathConstants {

    // =============================================
    // 用户相关文件路径
    // =============================================
    
    /**
     * 用户头像存储路径
     */
    public static final String USER_AVATAR_PATH = "users/avatars";
    
    /**
     * 用户配音文件存储路径
     */
    public static final String USER_RECORDING_PATH = "users/recordings";

    // =============================================
    // 绘本相关文件路径
    // =============================================
    
    /**
     * 绘本封面存储路径
     */
    public static final String BOOK_COVER_PATH = "books/covers";
    
    /**
     * 绘本页面图片存储路径
     */
    public static final String BOOK_PAGE_PATH = "books/pages";
    
    /**
     * 绘本音频文件存储路径
     */
    public static final String BOOK_AUDIO_PATH = "books/audios";

    // =============================================
    // 绘本集相关文件路径
    // =============================================
    
    /**
     * 绘本集封面存储路径
     */
    public static final String BOOK_SET_COVER_PATH = "book-sets/covers";

    // =============================================
    // 音频资源文件路径
    // =============================================
    
    /**
     * 磨耳朵音频资源存储路径
     */
    public static final String AUDIO_RESOURCE_PATH = "audios/resources";
    
    /**
     * 音频封面图片存储路径
     */
    public static final String AUDIO_COVER_PATH = "audios/covers";

    // =============================================
    // 社区相关文件路径
    // =============================================

    /**
     * 社区帖子图片存储路径
     */
    public static final String COMMUNITY_POST_IMAGE_PATH = "community/posts";

    // =============================================
    // 系统文件路径
    // =============================================
    
    /**
     * 临时文件存储路径
     */
    public static final String SYSTEM_TEMP_PATH = "system/temp";
    
    /**
     * 导出文件存储路径
     */
    public static final String SYSTEM_EXPORT_PATH = "system/exports";

    // =============================================
    // 文件类型常量
    // =============================================
    
    /**
     * 支持的图片文件类型
     */
    public static final String[] SUPPORTED_IMAGE_TYPES = {
        "image/jpeg", "image/jpg", "image/png", "image/gif", "image/webp"
    };
    
    /**
     * 支持的音频文件类型
     */
    public static final String[] SUPPORTED_AUDIO_TYPES = {
        "audio/mpeg", "audio/mp3", "audio/wav", "audio/ogg", "audio/aac", "audio/m4a"
    };

    // =============================================
    // 文件大小限制常量（单位：字节）
    // =============================================
    
    /**
     * 用户头像文件大小限制：2MB
     */
    public static final long MAX_AVATAR_SIZE = 2 * 1024 * 1024;
    
    /**
     * 绘本封面文件大小限制：5MB
     */
    public static final long MAX_BOOK_COVER_SIZE = 5 * 1024 * 1024;
    
    /**
     * 绘本页面图片文件大小限制：10MB
     */
    public static final long MAX_BOOK_PAGE_SIZE = 10 * 1024 * 1024;
    
    /**
     * 音频文件大小限制：50MB
     */
    public static final long MAX_AUDIO_SIZE = 50 * 1024 * 1024;

    /**
     * 社区帖子图片文件大小限制：5MB
     */
    public static final long MAX_COMMUNITY_POST_IMAGE_SIZE = 5 * 1024 * 1024;

    // =============================================
    // 工具方法
    // =============================================
    
    /**
     * 检查文件类型是否为支持的图片类型
     * 
     * @param contentType 文件MIME类型
     * @return 是否为支持的图片类型
     */
    public static boolean isSupportedImageType(String contentType) {
        if (contentType == null) {
            return false;
        }
        for (String supportedType : SUPPORTED_IMAGE_TYPES) {
            if (supportedType.equalsIgnoreCase(contentType)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 检查文件类型是否为支持的音频类型
     * 
     * @param contentType 文件MIME类型
     * @return 是否为支持的音频类型
     */
    public static boolean isSupportedAudioType(String contentType) {
        if (contentType == null) {
            return false;
        }
        for (String supportedType : SUPPORTED_AUDIO_TYPES) {
            if (supportedType.equalsIgnoreCase(contentType)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 根据文件路径获取文件类型描述
     * 
     * @param filePath 文件路径
     * @return 文件类型描述
     */
    public static String getFileTypeDescription(String filePath) {
        if (filePath == null) {
            return "未知文件";
        }
        
        if (filePath.startsWith(USER_AVATAR_PATH)) {
            return "用户头像";
        } else if (filePath.startsWith(USER_RECORDING_PATH)) {
            return "用户配音";
        } else if (filePath.startsWith(BOOK_COVER_PATH)) {
            return "绘本封面";
        } else if (filePath.startsWith(BOOK_PAGE_PATH)) {
            return "绘本页面";
        } else if (filePath.startsWith(BOOK_AUDIO_PATH)) {
            return "绘本音频";
        } else if (filePath.startsWith(BOOK_SET_COVER_PATH)) {
            return "绘本集封面";
        } else if (filePath.startsWith(AUDIO_RESOURCE_PATH)) {
            return "音频资源";
        } else if (filePath.startsWith(AUDIO_COVER_PATH)) {
            return "音频封面";
        } else if (filePath.startsWith(COMMUNITY_POST_IMAGE_PATH)) {
            return "社区帖子图片";
        } else if (filePath.startsWith(SYSTEM_TEMP_PATH)) {
            return "临时文件";
        } else if (filePath.startsWith(SYSTEM_EXPORT_PATH)) {
            return "导出文件";
        } else {
            return "其他文件";
        }
    }
}
